# coding=utf-8
from ctypes import *

# 上海证券交易所数据结构定义

'''
// 1.1 股票行情
typedef struct t_SH_StockMarketDataL2 {
  T_I32 nTime;                      //时间(HHMMSSmmmm)
  T_I32 nStatus;                    //状态
  T_U32 uPreClose;                  //前收盘价
  T_U32 uOpen;                      //开盘价
  T_U32 uHigh;                      //最高价
  T_U32 uLow;                       //最低价
  T_U32 uMatch;                     //最新价
  T_U32 uAskPrice[10];              //申卖价
  T_U32 uAskVol[10];                //申卖量
  T_U32 uBidPrice[10];              //申买价
  T_U32 uBidVol[10];                //申买量
  T_U32 uNumTrades;                 //成交笔数
  T_I64 iVolume;                    //成交总量
  T_I64 iTurnover;                  //成交总金额
  T_I64 iTotalBidVol;               //委托买入总量
  T_I64 iTotalAskVol;               //委托卖出总量
  T_U32 uWeightedAvgBidPrice;       //加权平均委买价格
  T_U32 uWeightedAvgAskPrice;       //加权平均委卖价格
  T_I32 nIOPV;                      //IOPV净值估值
  T_I32 nYieldToMaturity;           //到期收益率
  T_U32 uHighLimited;               //涨停价
  T_U32 uLowLimited;                //跌停价
  char sPrefix[4];                  //证券信息前缀
  T_I32 nSyl1;                      //市盈率1 2 位小数 股票：价格/上年每股利润 债券：每百元应计利息
  T_I32 nSyl2;                      //市盈率2 2 位小数 股票：价格/本年每股利润 债券：到期收益率 基金：每百份的IOPV 或净值 权证：溢价率
  T_I32 nSD2;                       //升跌2（对比上一笔）
} Stock_MarketData,T_SH_StockMarketDataL2,*PSH_StockMarketDataL2;
'''

class PSH_StockMarketDataL2(Structure):
    _fields_ = [("nTime", c_int),
                ("nStatus", c_int),
                ("uPreClose", c_uint),
                ("uOpen", c_uint),
                ("uHigh", c_uint),
                ("uLow", c_uint),
                ("uMatch", c_uint),
                ("uAskPrice", c_uint * 10),
                ("uAskVol", c_uint * 10),
                ("uBidPrice", c_uint * 10),
                ("uBidVol", c_uint * 10),
                ("uNumTrades", c_uint),
                ("iVolume", c_longlong),
                ("iTurnover", c_longlong),
                ("iTotalBidVol", c_longlong),
                ("iTotalAskVol", c_longlong),
                ("uWeightedAvgBidPrice", c_uint),
                ("uWeightedAvgAskPrice", c_uint),
                ("nIOPV", c_int),
                ("nYieldToMaturity", c_int),
                ("uHighLimited", c_uint),
                ("uLowLimited", c_uint),
                ("sPrefix", c_char * 4),
                ("nSyl1", c_int),
                ("nSyl2", c_int),
                ("nSD2", c_int)]

'''
//1.2 dbf行情，上交所与深交所均用此结构
typedef struct t_SH_StockMarketDataL1 {
  T_I32 nTime;                      //时间(HHMMSSmmmm)
  T_I32 nStatus;                    //状态
  T_U32 uPreClose;                  //前收盘价
  T_U32 uOpen;                      //开盘价
  T_U32 uHigh;                      //最高价
  T_U32 uLow;                       //最低价
  T_U32 uMatch;                     //最新价
  T_U32 uAskPrice[5];               //申卖价
  T_U32 uAskVol[5];                 //申卖量
  T_U32 uBidPrice[5];               //申买价
  T_U32 uBidVol[5];                 //申买量
  T_U32 uNumTrades;                 //成交笔数
  T_I64 iVolume;                    //成交总量
  T_I64 iTurnover;                  //成交总金额
  T_U32 uHighLimited;               //涨停价
  T_U32 uLowLimited;                //跌停价
  char sTradingPhaseCode[8];        //该字段为8位字符串，左起每位表示特定的含义，无定义则填空格。第1位：‘S’表示启动（开市前）时段，‘C’表示集合竞价时段，‘T’表示连续交易时段，‘B’表示休市时段，‘E’表示闭市时段，‘P’表示产品停牌。
  T_I32 nPreIOPV;                   //基金T-1日收盘时刻IOPV  MDStreamID == MD004 表示基金时有效
  T_I32 nIOPV;                      //基金IOPV  MDStreamID == MD004 表示基金时有效
} Stock_MarketData_L1,T_SH_StockMarketDataL1,*PSH_StockMarketDataL1;
'''